
\chapter{Metodologia}
\label{chap:metodo}
O projeto foi desenvolvido com base nas fases do \textit{IPProcess}, descrito no capítulo \ref{chap:fundam}. Assim 
serão descritos a seguir o que foi feito, os artefatos que forma gerados e as principais ferramentas
utilizadas em cada fase do processo.
\section{Fases do Desenvolvimento}
É importante frizar que o processo de desenvolvimento é dinâmico e interativo, em cada fase todas as 
disciplinas do \textit{IPProcess} são executadas, porém com intensidade diferente conforme figura \ref{fasesiterativa}. 
Por isso a sequência das atividades na prática não é tão clara como será descrito, para facilitar o 
entendimento do leitor, em cada fase será descrito a atividade foco no momento.
\begin{figure}[htbp]
\centering
\caption[Dinâmica do IPProcess]{Dinâmica do IPProcess}
\includegraphics[width=12cm,height=8cm]{fases_iterativa.jpg}
\fonte{\cite{BRAZILIP}}
\label{fasesiterativa}
\end{figure}
\subsection{Conception}
Na etapa de concepção os principais artefatos gerados foram: o documento de requisitos do sistema e o 
diagrama de casos de uso. O primeiro define os requisitos funcionais e não funcionais, o segundo 
define graficamente um cenário que mostra as funcionalidades do sistema e seus principais atores.
\cite{UML}. A figura \ref{casouso} mostra o diagrama de casos de uso elaborado nessa fase.


\begin{figure}[htbp]
\centering
\caption[Diagrama de Casos de Uso (Fase Inicial)]{Diagrama de Casos de Uso (Fase Inicial)}
\includegraphics[width=10cm,height=10cm]{caso_de_uso.jpg}
\fonte{Próprio Autor}
\label{casouso}
\end{figure}
Como dito anteriormente o processo é interativo, por isso, a figura \ref{casouso} 
mostra o diagrama ainda em fase inicial do desenvolvimento. A evolução do desenvolvimento e resultados 
finais serão detalhados no capítulo \ref{chap:resul}. 

\subsection{Architecture}
O próximo passo no desenvolvimento foi definir a arquitetura do sistema. Essa arquitetura se tornou
a base para todo o restante do projeto, principalmente para a implementação. Para definir a arquitetura
do sistema foi elaborado um diagrama de classe com o abjetivo de definir o relacionamento entre as 
entidades do projeto. Todos os diagramas utilizados durante o desenvolvimento do projeto foram baseados
na linguagem de modelagem \sigla{UML}{Unified Modeling Language}, por fazer parte de práticas de engenharia
de \textit{software} já disseminadas e consolidadas \cite{UML}. A figura \ref{classes} mostra o diagrama 
de classe do sistema gerado na primeira interação do processo de desenvolvimento.
\begin{figure}[htbp]
\centering
\caption[Diagrama de Classes (Fase Inicial)]{Diagrama de Classes (Fase Inicial)}
\includegraphics[width=10cm,height=10cm]{diagrama_classe.jpg}
\fonte{Próprio Autor}
\label{classes}
\end{figure}
\subsection{RTL Design}
Nessa etapa, o projeto foi codificado com base na arquitetura, nos diagramas e requisitos elaborados nas
fases anteriores. Uma atividade importante desenvolvida nessa fase foi a verificação funcional do protótipo,
a qual foi essencial para verificar se os requisitos estavam sendo contemplados e certificar também se o 
algorítmo de detecção de borda tinha sido implementado corretamente. Na implementação do protótipo foi
usado a linguagem de descrião de \textit{Hardware Verilog}, para implementar o \textit{testbench} da 
verificação funcional foi utilizado a linguagem \textit{SystemVerilog}.


Para a implementação do algoritmo de detecção de borda, foi necessário escolher a máscara/filtro a
ser utilizado. Optou-se pela máscara de Sobel por ser amplamente implementada em software, como 
por exemplo, o Matlab.

\subsection{Prototyping}
Finalmente nessa etapa foi feito a prototipagem do \textit{IP-Core} em FPGA, para isso foi utilizado o 
\textbf{kit de desenvolvimento DE2} da \textit{Altera}. A escolha de tal equipamento se deve ao fato
que ele possui recursos de \textit{hardware} e módulos implementados necessários ao funcionamento do 
\textit{IP-Core} desenvolvido, tais como:
\begin{itemize}
\item \textbf{FPGA:}
  \begin{itemize}
    \item Cyclone II EP2C35F672C6 FPGA and EPCS16 serial configuration device
  \end{itemize}
\item \textbf{I/O Devices:}
  \begin{itemize}
    \item Built-in USB Blaster for FPGA configuration;
    \item 10/100 Ethernet, RS-232, Infrared port;
    \item Video Out (VGA 10-bit DAC);
    \item Video In (NTSC/PAL/Multi-format);
    \item USB 2.0 (type A and type B);
    \item PS/2 mouse or keyboard port;
    \item Line-in, Line-out, microphone-in (24-bit audio CODEC);
    \item Expansion headers (76 signal pins).
  \end{itemize}
\item \textbf{Memory:}
  \begin{itemize}
    \item 8-MB SDRAM, 512-KB SRAM, 4-MB Flash;
    \item SD memory card slot.
  \end{itemize}
\item \textbf{Switches, LEDs, Displays, and Clocks:}
  \begin{itemize}
    \item 18 toggle switches;
    \item 4 debounced pushbutton switches;
    \item 18 red LEDs, 9 green LEDs;
    \item Eight 7-segment displays;
    \item 16 x 2 LCD display;
    \item 27-MHz and 50-MHz oscillators, external SMA clock input.
  \end{itemize}
\end{itemize}

Veja na figura \ref{de2} a imagem do referido equipamento.
\begin{figure}[htbp]
\centering
\caption[Kit de Desenvolvimento DE2)]{Kit de Desenvolvimento DE2 da Altera}
\includegraphics[width=10cm,height=10cm]{de2.jpg}
\fonte{\cite{altera}}
\label{de2}
\end{figure}

\section{Principais Ferramentas Utilizadas}

Nas duas primeiras fases, \textit{Conception} e \textit{Architecture}, foi utilizada basicamente a 
\sigla{IDE}{Integrated Development Environment} \textit{Netbeans 7.0}, para confeccionar os modelos
de casos de uso e classes do sistema.


Nas duas últimas fases, \textit{RTL Design} e \textit{Prototyping}, foi utilizado as seguintes 
ferramentas de \textit{software}:
\begin{itemize}
 \item \textbf{Quartos II Web Edition 9.0}; foi utilizado para a codificação do protótipo, síntese do código em 
verilog e programação da FPGA.
  \item \textbf{ModelSim Student Edition}; foi utilizado para a implementação e execução da verificação
funcional.
  \item \textbf{Matlab R2009a}; foi utilizado para implementar em \textit{software} alto nível o 
algoritmo de detecção de borda com Sobel, servindo assim de parâmetro para o modelo de referência na 
verificação funcional.
\end{itemize}







